home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / AdminMessagePort.p < prev    next >
Text File  |  1996-05-01  |  4KB  |  144 lines

  1. {
  2.      File:        AdminMessagePort.p
  3.  
  4.      Contains:    xxx put contents here xxx
  5.  
  6.      Version:    Technology:    xxx put the technology version here xxx
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT AdminMessagePort;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __ADMINMESSAGEPORT__}
  28. {$SETC __ADMINMESSAGEPORT__ := 1}
  29.  
  30. {$I+}
  31. {$SETC AdminMessagePortIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37.  
  38. {$PUSH}
  39. {$ALIGN MAC68K}
  40. {$LibExport+}
  41.  
  42. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  43. {
  44. //------------------------------------------------------------------------------------
  45.  
  46.     The I/O system reserves one bit of the Kernel message system's type mask to use
  47.     for administration messages. Different services within the I/O system use this
  48.     single message type. The routine and constants described in this file are used
  49.     by clients of these administration services to distinguish between the different
  50.     types.
  51.     
  52.     It is intended that clients of I/O administration services use a single Kernel 
  53.     message port (PortID) for all messages: administration and data. Clients can
  54.     create multiple message objects (ObjectID) for the same port and pass a different
  55.     object to each administration service and use another for data handling.
  56.     
  57.     The client should use separate tasks to receive administration messages and data
  58.     messages. Use the message type parameter of ReceiveMessage as a bit-mask to specify
  59.     the type of message to receive in each task. The code below shows an example of an
  60.     administration task.
  61.     
  62.     AdministrationTask()
  63.     (
  64.         MessageControlBlock    mcb;
  65.         union (
  66.             DevNMessage        devn;
  67.             PMMessage        pm;
  68.             Arbitration        arb;
  69.         ) adminBuffer;
  70.         UInt32                messageType;
  71.  
  72.         while (true) 
  73.         (
  74.             ReceiveMessageSync(adminPort, kAMPMessageTypeMask, &mcb, &adminBuffer, ...)
  75.             AMPGetMessageType(mcb->messageContents, &messageType);
  76.             
  77.             switch (messageType)
  78.             (
  79.                 case kAMPDeviceNotificationMsg:
  80.                     (
  81.                         DevNMessage* devn = mcb.messageContents;
  82.                         switch (devn->subMessageType)
  83.                         (
  84.                             ...
  85.                         )
  86.                     )
  87.                     break;
  88.                 case kAMPPowerManagementMsg:
  89.                     (
  90.                         PMMessage* pm = mcb.messageContents;
  91.                         switch (pm->type)
  92.                         (
  93.                             ...
  94.                         )
  95.                     )
  96.                     break;
  97.                 case kAMPArbitrationServiceMsg:
  98.                     (
  99.                         Arbitration* arb = mcb.messageContents;
  100.                         switch (arb->type)
  101.                         (
  102.                             ...
  103.                         )
  104.                     )
  105.                     break;
  106.                 default:
  107.                     break;
  108.             )
  109.         )
  110.     )
  111.  
  112. //------------------------------------------------------------------------------------
  113. }
  114. {     Constants for use in ReceiveMessage. }
  115.  
  116. CONST
  117.     kAMPMessageTypeMask            = $08000000;                    {  highest bit not reserved by the kernel }
  118.     kNonKernelNonAMPMessageTypes = $07FFFFFF;
  119.  
  120. {     Constants returned by AMPGetMessageType }
  121.     kAMPDeviceNotificationMsg    = 1;
  122.     kAMPPowerManagementMsg        = 2;
  123.     kAMPArbitrationServiceMsg    = 3;
  124.  
  125. {
  126.     AMPGetMessageType:
  127.  
  128.     Given an I/O administration message this routine determines the type of 
  129.     message. If the type cannot be deteremined zero is returned and debugging 
  130.     builds throw an assertion.
  131. }
  132. PROCEDURE AMPGetMessageType(messageContents: UNIV Ptr; VAR messageType: UInt32); C;
  133. {$ENDC}
  134. {$ALIGN RESET}
  135. {$POP}
  136.  
  137. {$SETC UsingIncludes := AdminMessagePortIncludes}
  138.  
  139. {$ENDC} {__ADMINMESSAGEPORT__}
  140.  
  141. {$IFC NOT UsingIncludes}
  142.  END.
  143. {$ENDC}
  144.